package com.atguigu.spzx.common.handler;

import com.atguigu.spyx.model.common.Result;
import com.atguigu.spyx.model.exception.SpzxException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * @author LT
 * @create 2023-11-01-18:41
 */
@RestControllerAdvice
@Slf4j
public class SpzxGlobalExceptionHandler {
    @ExceptionHandler(value = Exception.class)
    public Result exception(Exception e){
        if (e!=null){
            log.error("出现异常:{}", ExceptionUtils.getStackTrace(e));
        }
        return Result.fail();
    }
    //希望异常处理器捕获异常后
    //给前端提示的Result对象的code 和message能够精确描述异常，前端进行友好提示
    //如果异常处理器捕获到的异常中 包含了我们需要的code和message值，我们使用它们创建Result对象返回
    // 解决：使用自定义异常类 对异常进行扩展(携带code和message和发生的原异常对象)
    @ExceptionHandler(value = SpzxException.class)
    public Result exception(SpzxException e){
        if (e.getE()!=null){
            log.error("出现异常:{}", ExceptionUtils.getStackTrace(e));
        }
        return Result.fail().code(e.getCode()).message(e.getMessage());
    }

}
